package com.aspose.cells;

class zhm implements ICustomParser {
   private StringBuilder a = new StringBuilder(50);
   private StringBuilder b = new StringBuilder(50);
   private zatj c = new zatj();
   private com.aspose.cells.a.a.za d;
   private zate e;
   private zahk f;

   public zhm(zate var1) {
      this.d = var1.a().f();
      this.e = var1;
      this.f = var1.c();
      if (this.f == null) {
         this.f = new zhn(var1);
      }

   }

   public Object parseObject(String value) {
      this.a.setLength(0);
      this.b.setLength(0);
      this.c.c();
      if (value != null && !"".equals(value)) {
         char[] var2 = value.toCharArray();
         int var3 = 0;
         int var4 = var2.length;
         boolean var6 = false;
         boolean var7 = false;

         while(true) {
            int var5;
            if (var3 < var4) {
               switch(var2[var3]) {
               case ' ':
                  this.a.append(' ');
                  ++var3;
                  continue;
               case '(':
                  if (!var7 && !var6 && this.e.d()) {
                     var7 = true;
                     this.a.append('(');
                     ++var3;
                     continue;
                  }

                  return null;
               case '-':
                  if (!var7 && !var6) {
                     var6 = true;
                     ++var3;
                     continue;
                  }

                  return null;
               default:
                  if (this.c.f() == null) {
                     var5 = this.f.b(var2, var3, false);
                     if (var5 > 0) {
                        if (var3 + var5 >= var2.length) {
                           return null;
                        }

                        this.c.b(new String(var2, var3, var5));
                        this.a.append(var2, var3, var5);
                        var3 += var5;
                        continue;
                     }
                  }
               }
            }

            boolean var8 = false;
            int var9 = -1;

            while(true) {
               if (var4 > var3) {
                  switch(var2[var4 - 1]) {
                  case ' ':
                     --var4;
                     continue;
                  case ')':
                     if (var7 && !var8) {
                        --var4;
                        continue;
                     }

                     return null;
                  default:
                     if (var9 <= -1 && this.c.f() == null) {
                        var5 = this.f.b(var2, var4 - 1, true);
                        if (var5 > 0) {
                           var4 -= var5;
                           if (var4 <= var3) {
                              return null;
                           }

                           this.c.b(new String(var2, var4, var5));
                           continue;
                        }

                        var5 = this.f.a(var2, var4 - 1, true);
                        if (var5 > 0) {
                           var9 = var4;
                           var4 -= var5;
                           if (var4 <= var3) {
                              return null;
                           }

                           this.c.c(new String(var2, var4, var5));
                           continue;
                        }
                     }
                  }
               }

               if (var3 >= var4) {
                  return null;
               }

               int var10 = this.a.length();
               boolean var11 = var2[var3] == '0';
               if (var11) {
                  ++var3;
                  if (var3 < var4) {
                     this.a.append('0');

                     while(var2[var3] == '0') {
                        this.a.append('0');
                        ++var3;
                        if (var3 == var4) {
                           break;
                        }
                     }
                  }
               }

               double var12 = 0.0D;
               boolean var14 = var9 > -1;
               if (var3 < var4) {
                  int var15 = -1;

                  label335:
                  while(true) {
                     if (var2[var3] >= '0' && var2[var3] <= '9') {
                        this.b.append(var2[var3]);
                        var12 = var12 * 10.0D + (double)(var2[var3] - 48);
                        if (var11 && var15 < 0) {
                           this.a.append('0');
                        }

                        ++var3;
                        if (var3 >= var4) {
                           break;
                        }
                     } else {
                        var5 = this.f.a(var2, var3);
                        if (var5 > 0) {
                           if (var15 > -1) {
                              if (var3 - var15 != 4) {
                                 return null;
                              }

                              var15 = -1;
                           }

                           var3 += var5;
                           if (this.a.length() > var10) {
                              this.a.append('.');
                           } else if (var10 > 0 || var4 < var2.length || var3 == var4 || !var11 && var12 < 0.1D) {
                              this.a.append("#.");
                           }

                           if (var14) {
                              this.b();
                              var12 /= 100.0D;
                              var14 = false;
                           } else if (this.b.length() < 1) {
                              this.b.append("0.");
                           } else {
                              this.b.append('.');
                           }
                           break;
                        }

                        if (!var11 && var12 < 0.1D) {
                           return null;
                        }

                        var5 = this.f.b(var2, var3);
                        if (var5 <= 0) {
                           if (var15 > -1) {
                              if (var3 - var15 != 4) {
                                 return null;
                              }

                              var15 = -1;
                           }

                           switch(var2[var3]) {
                           case 'E':
                           case 'e':
                              if (this.a.length() == var10) {
                                 this.a.append("#");
                              }

                              var12 = this.a(var2, var3, var4, var12, var14);
                              if (!this.c.h()) {
                                 return null;
                              }

                              var14 = false;
                              var3 = var4;
                              break label335;
                           default:
                              return null;
                           }
                        }

                        if (var15 < 0) {
                           if (!var11 && (this.a.length() < 1 || this.a.charAt(this.a.length() - 1) != '#')) {
                              this.a.append('#');
                           }

                           this.a.append(',');
                           if (var11) {
                              this.a.append("000");
                           } else {
                              this.a.append("###");
                           }
                        } else {
                           if (var3 - var15 != 4) {
                              return null;
                           }

                           if (var11) {
                              this.a.append(",000");
                           }
                        }

                        var15 = var3;
                        var3 += var5;
                        if (var3 >= var4) {
                           break;
                        }
                     }
                  }

                  if (var15 > -1 && var3 - var15 != 4) {
                     return null;
                  }

                  if (var3 >= var4) {
                     if (!var11 && !this.c.h() && var12 < 0.1D) {
                        return null;
                     }
                  } else {
                     int var16 = var3;
                     double var17 = 0.0D;

                     label299:
                     while(true) {
                        if (var2[var3] >= '0' && var2[var3] <= '9') {
                           this.b.append(var2[var3]);
                           var17 = var17 * 10.0D + (double)(var2[var3] - 48);
                           ++var3;
                           if (var3 < var4) {
                              continue;
                           }
                           break;
                        }

                        if (!var11 && var12 < 0.1D && var16 == var3) {
                           return null;
                        }

                        switch(var2[var3]) {
                        case 'E':
                        case 'e':
                           if (this.a.length() == var10) {
                              this.a.append("#.");
                           }

                           var16 = var3 - var16;
                           var12 += var17 / Math.pow(10.0D, !var14 && var9 > -1 ? (double)(var16 + 2) : (double)var16);
                           com.aspose.cells.b.a.g.zf.a(this.a, (char)(var2[var3 - 1] == '0' ? '0' : '#'), var16);
                           var12 = this.a(var2, var3, var4, var12, var14);
                           if (!this.c.h()) {
                              return null;
                           }

                           var3 = var4;
                           var14 = false;
                           break label299;
                        default:
                           return null;
                        }
                     }

                     if (!this.c.h()) {
                        var16 = var3 - var16;
                        var12 += var17 / Math.pow(10.0D, !var14 && var9 > -1 ? (double)(var16 + 2) : (double)var16);
                        if (var2[var3 - 1] == '0') {
                           if (this.a.length() == var10) {
                              this.a.append("#.");
                           }

                           com.aspose.cells.b.a.g.zf.a(this.a, '0', var16);
                        } else if (this.a.length() > 0) {
                           if (this.a.length() == var10) {
                              this.a.append("#.");
                           }

                           com.aspose.cells.b.a.g.zf.a(this.a, '#', var16);
                        }
                     }
                  }
               }

               if (var4 < var2.length) {
                  if (this.a.length() == var10) {
                     this.a.append('0');
                  }

                  var3 = var4;
                  var4 = var2.length;
                  if (var9 > -1) {
                     if (this.c.h()) {
                        var4 = var9 - this.c.g().length();
                     } else if (var14) {
                        var12 /= 100.0D;
                        this.b();
                        var14 = false;
                     }
                  }

                  while(var3 < var4) {
                     this.a.append(var2[var3]);
                     ++var3;
                  }

                  if (var4 < var2.length && var9 < var2.length) {
                     var3 = var9;

                     for(var4 = var2.length; var3 < var4; ++var3) {
                        this.a.append(var2[var3]);
                     }
                  }
               }

               if (this.a.length() > 0) {
                  if (this.a.length() == var10) {
                     this.a.append('0');
                  }

                  this.c.a(com.aspose.cells.b.a.zr.a(this.a));
                  if (var7) {
                     com.aspose.cells.b.a.g.zf.a(this.a, "(", "");
                     com.aspose.cells.b.a.g.zf.a(this.a, ")", "");
                     this.a.append(";");
                     this.a.append(this.c.e());
                     this.c.a(com.aspose.cells.b.a.zr.a(this.a));
                  }
               }

               if (var11 && this.b.length() < 1) {
                  this.b.append("0");
               } else if (var6 || var7) {
                  this.b.insert(0, '-');
                  var12 = -var12;
               }

               this.c.d(com.aspose.cells.b.a.zr.a(this.b));
               this.c.a(var12);
               return var12;
            }
         }
      } else {
         return null;
      }
   }

   public zati a() {
      return this.c;
   }

   private double a(char[] var1, int var2, int var3, double var4, boolean var6) {
      ++var2;
      if (var2 == var3) {
         return var4;
      } else {
         this.a.append("E+");
         boolean var7 = false;
         boolean var8;
         switch(var1[var2]) {
         case '+':
            ++var2;
            if (var2 == var3) {
               this.a.setLength(0);
               return var4;
            }

            var8 = var1[var2] == '0';
            break;
         case '-':
            ++var2;
            if (var2 == var3) {
               return var4;
            }

            var7 = true;
            var8 = var1[var2] == '0';
            break;
         case '0':
            var8 = true;
            break;
         default:
            var8 = false;
         }

         boolean var9;
         int var10;
         if (var4 == 0.0D) {
            var9 = true;
            var10 = var7 ? (this.c.g() != null ? 305 : 307) : (this.c.g() != null ? 311 : 309);
         } else {
            var9 = false;
            var10 = var7 ? (var6 ? 307 : 309) : (var6 ? 309 : 307);
         }

         int var11 = 0;
         int var12 = -1;

         int var13;
         for(var13 = 0; var2 < var3; ++var2) {
            if (var1[var2] < '0' || var1[var2] > '9') {
               this.a.setLength(0);
               return var4;
            }

            if (var8) {
               this.a.append('0');
            }

            var11 = var11 * 10 + (var1[var2] - 48);
            if (var12 < 0) {
               if (var9) {
                  var12 = var10;
               } else {
                  var13 = (int)Math.floor(Math.log10(var4));
                  var12 = var7 ? var10 + var13 : var10 - var13;
               }
            }

            if (var11 > var12) {
               this.a.setLength(0);
               return var4;
            }
         }

         this.c.a(true);
         if (!var8) {
            this.a.append("0");
         }

         if (var9) {
            this.b.append('0');
            return var4;
         } else {
            this.b.append('E');
            if (var7) {
               var11 = -var11;
            }

            if (var6) {
               var11 -= 2;
            }

            this.b.append(var11);
            if ((var7 ? -var11 : var11) > var10) {
               return var4 / Math.pow(10.0D, (double)var13) * Math.pow(10.0D, (double)(var13 + var11));
            } else {
               return var4 * Math.pow(10.0D, (double)var11);
            }
         }
      }
   }

   private void b() {
      switch(this.b.length()) {
      case 0:
         this.b.append("0.00");
         break;
      case 1:
         this.b.insert(0, "0.0");
         break;
      case 2:
         this.b.insert(0, "0.");
         break;
      default:
         this.b.insert(this.b.length() - 2, '.');
      }

   }

   public String getFormat() {
      return this.c.e();
   }
}
